package com.itbaizhan.myshiro.listener;

import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionListener;
import org.springframework.stereotype.Component;
/*shiro中提供了会话管理器，可以对会话对象进行配置和监听   运行了就会自雷触发
* 实现了SessionListener*/
//1,监听器  2，会话管理器 sessionManager  3.在securityManager配置
@Component
public class MySessionListener implements SessionListener {
    //会话创建时触发
    @Override
    public void onStart(Session session) {
        System.out.println("会话创建"+session.getId());
    }
    //退出会话时触发
    @Override
    public void onStop(Session session) {
        System.out.println("会话停止"+session.getId());
    }
    //会话过期时触发
    @Override
    public void onExpiration(Session session) {
        System.out.println("会话过期"+session.getId());
    }
}
/*在会话管理器中配置会话监听器     shiroConfig配置类中配置

// 会话管理器
@Bean
public SessionManager sessionManager(MySessionListener sessionListener) {
  // 创建会话管理器
  DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
  // 创建会话监听器集合
  List<SessionListener> listeners = new ArrayList();
  listeners.add(sessionListener);
  // 将监听器集合设置到会话管理器中
  sessionManager.setSessionListeners(listeners);

  // 全局会话超时时间（单位毫秒），默认30分钟,设置为5秒
  sessionManager.setGlobalSessionTimeout(5*1000);
  // 是否开启删除无效的session对象，默认为true
  sessionManager.setDeleteInvalidSessions(true);
  // 是否开启定时调度器进行检测过期session，默认为true
  sessionManager.setSessionValidationSchedulerEnabled(true);

  return sessionManager;
}
在SecurityManager中配置会话管理器    shiroConfig配置类中配置

@Bean
public DefaultWebSecurityManager securityManager(MyRealm myRealm,MyRealm2 myRealm2,SessionManager sessionManager){
  DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
  // 自定义Realm放入SecurityManager中
  //     securityManager.setRealm(myRealm);
  // 设置Realm管理者(需要设置在Realm之前)
  securityManager.setAuthenticator(modularRealmAuthenticator());
  List<Realm> realms = new ArrayList();
  realms.add(myRealm);
  //     realms.add(myRealm2);
  securityManager.setRealms(realms);
  //添加会话管理器  会话监听器
  securityManager.setSessionManager(sessionManager);
  return securityManager;
}*/